package com.heatup.apt.common.util;

import java.text.SimpleDateFormat;
import java.util.StringTokenizer;

import org.apache.commons.lang3.StringUtils;

/**
 * 字符串处理工具类
 * <P>File name : StringUtil.java </P>
 * <P>Author : xwsingly </P> 
 * <P>Date : 2015年10月21日 </P>
 */
public class StringUtil {

    /**
     * 格式化字符串
     * StringUtil.formatStringTrim()<BR>
     * <P>Author :  xwsingly </P>  
     * <P>Date : 2015年10月21日 </P>
     * @param obj
     * @return
     */
    public static String formatStringTrim(Object obj) {
        if (obj == null) return "";
        String temp = obj.toString().trim();
        if ("".equals(temp) || "null".equals(temp)) {
            return "";
        }
        return temp;
    }

    /**
     * 判断字符串数组 String[]是否为空
     * StringUtil.isStringArrayEmpty()<BR>
     * <P>Author :  xwsingly </P>  
     * <P>Date : 2015年10月21日 </P>
     * @param obj
     * @return
     */
    public static boolean isStringArrayEmpty(Object obj) {
        if (obj == null) return true;
        try {
            String[] strs = (String[]) obj;
            if (strs.length > 0)
                return false;
            else
                return true;
        } catch (Exception e) {
            return true;
        }
    }


    /**
     * 判断两个字符串是否相等
     * StringUtil.isEquals()<BR>
     * <P>Author :  xwsingly </P>  
     * <P>Date : 2015年10月21日 </P>
     * @param obj1
     * @param obj2
     * @return true相等  false不相等
     */
    public static boolean isEquals(Object obj1, Object obj2) {
        if (ToString(obj1).equals(ToString(obj2))) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 判断两个字符串是否不相等
     * StringUtil.isNotEquals()<BR>
     * <P>Author :  xwsingly </P>  
     * <P>Date : 2015年10月21日 </P>
     * @param obj1
     * @param obj2
     * @return true不相等 false相等
     */
    public static boolean isNotEquals(Object obj1, Object obj2) {
        return !isEquals(obj1, obj2);
    }

    /**
     * 判断是否为空
     * StringUtil.isEmpty()<BR>
     * <P>Author :  xwsingly </P>  
     * <P>Date : 2015年10月21日 </P>
     * @param obj
     * @return true为空 false不为空
     */
    public static boolean isEmpty(Object obj) {
        if (obj == null)
            return true;
        String temp = obj.toString().trim();
        if ("".equals(temp) || "null".equals(temp))
            return true;
        else
            return false;
    }

    /**
     * 判断是否不为空
     * StringUtil.isNotEmpty()<BR>
     * <P>Author :  xwsingly </P>  
     * <P>Date : 2015年10月21日 </P>
     * @param obj
     * @return true不为空 false为空
     */
    public static boolean isNotEmpty(Object obj) {
        return !isEmpty(obj);
    }

    /**
     * 获取唯一数
     * StringUtil.getDateRandow()<BR>
     * <P>Author :  xwsingly </P>  
     * <P>Date : 2015年10月21日 </P>
     * @return
     */
    public static String getDateRandow() {
        SimpleDateFormat tempDate = new SimpleDateFormat("yyMMdd" + "" + "hhmmssSS");
        String datetime = tempDate.format(new java.util.Date());    //12位
        int randomInt = (int) (Math.random() * 10000);
        datetime = datetime + randomInt;
        return datetime;
    }

    
    /**
     * format string
     * StringUtil.ToString()<BR>
     * <P>Author :  xwsingly </P>  
     * <P>Date : 2015年10月21日 </P>
     * @param obj
     * @return
     */
    public static String ToString(Object obj) {
        if (obj == null) return "";
        String temp = obj.toString().trim();
        return temp;
    }


    /**
     *  判断一个数组是否为空
     * StringUtil.isNulls()<BR>
     * <P>Author :  xwsingly </P>  
     * <P>Date : 2016年1月4日 </P>
     * @param values 数组
     * @return true是数组 false不是数组
     */
	public static boolean isNulls(String[] values) {
		if ((values == null) || (values.length == 0)) {
			return true;
		}
		for (String value : values) {
			if ((value == null) || (value.matches("\\s*"))) {
				return true;
			}

		}
		return false;
	}
	
	
	/**
	 * 将一个字符串反转
	 * StringUtil.reverse()<BR>
	 * <P>Author :  xwsingly </P>  
	 * <P>Date : 2015年12月8日 </P>
	 * @param string
	 * @return
	 */
	public static String reverse(String string){
		return new StringBuilder(string).reverse().toString();  
	}

	 /**
     * String显示数据前过滤掉null
     * 
     * @param myString
     * @return
     */
    public static String prt(String myString) {
        if (myString != null && myString.length() != 0) {
            return myString;
        } else {
            return "";
        }
    }

    public static String prt(Object obj) {
        if (obj != null) {
            return prt(obj.toString());
        } else {
            return "";
        }
    }

    
    /**
     * 显示数据前过滤掉null，截取一定位数
     * 
     * @param myString
     * @param index
     *            最大显示的长度
     * @return
     */
    public static String prt(String myString, int index) {
        if (myString != null && myString.length() != 0) {
            if (myString.length() >= index) {
                return myString.substring(0, index);
            } else {
                return myString;
            }
        } else {
            return "";
        }
    }

    public static String prt(Object obj, int index) {
        if (obj != null) {
            return prt(obj.toString(), index);
        } else {
            return "";
        }
    }

    
    /**
     * 字符串截取小数点或标识符以前的字符
     * @param myString
     * @param index
     * @return
     */
    public static String prt(String myString, String index){
    	if(myString != null && myString.length() != 0){
    		if(StringUtils.isBlank(index))
    			index = ".";
    		int length = myString.indexOf(index);
    		if(length>=0){
    			return myString.substring(0, length);
    		}else{
    			return myString;
    		}
    	}else{
    		return "";
    	}
    }
    
    
    public static boolean notNull(Object obj){
        return obj!=null;
    }
    
    
    public static String[] split(String source, String delim) {
        String[] wordLists;
        if (source == null) {
          wordLists = new String[1];
          wordLists[0] = source;
          return wordLists;
        }
        if (delim == null) {
          delim = ",";
        }
        StringTokenizer st = new StringTokenizer(source, delim);
        int total = st.countTokens();
        wordLists = new String[total];
        for (int i = 0; i < total; i++) {
          wordLists[i] = st.nextToken();
        }
        return wordLists;
      } 
    
    public static boolean notEmpty(String str){
        return notNull(str)&&(str.trim().length()>0);
    }
    
    public static Boolean isBlank(String str) {
    	if(str == null) return true;
    	if("".equals(str)) return true;
    	if(str.length() > 0 && "".equals(str.trim())) return true;
    	return false;
    }
    
    public static Boolean isNotBlank(String str) {
    	return !isBlank(str);
    }
}